/**
 * 构建Tree、comboTree、treeGrid数据模型
 */
export class TreeUtil {
  /**
   * 根据【parentId、id】字段关联上下级关系
   * @param data
   *  [
   *    {id: "a", parentId: "root"},
   *    {id: "b", parentId: "root"},
   *    {id: "a1", parentId: "a"},
   *    {id: "b1", parentId: "b"},
   *  ]
   * @returns {any}
   *  [
   *    {id: "a", parentId: "root", children:[
   *      {id: "a1", parentId: "a"},
   *    ]},
   *    {id: "b", parentId: "root", children:[
   *      {id: "b1", parentId: "b"},
   *    ]},
   *  ]
   */
  mergeByParentId(data): any {
    let temp = null;
    if (data && data.length > 0) {
      /**
       * 冒泡排序
       */
      for (let i = 0; i < data.length - 1; i++) {
        for (let j = 0; j < data.length - 1 - i; j++) {
          /**
           * 通过parentId与id进行关联
           */
          if (data[i].parentId === data[j + 1 + i].id) {
            if (data[j + 1 + i].children == null) {
              data[j + 1 + i].children = []; // 首次关联成功需要新增children字段，该字段数据类型为数组
            }
            // data[i].text = data[i].name; // 新增text字段，值为name字段的值
            temp = data[i];
            data[j + 1 + i].children.push(temp); // 将匹配成功的数据设置关联关系
            data[i] = null; // 清空已设置关联关系的子元素值
            break;
          }
        }
      }
      temp = null;
      /**
       * 过滤已经匹配成功的数组：删除数组中元素为null的元素
       */
      data = data.filter(item => {
        if (item) {
          // if (item.parentId === 'root' && item.children) { item.state = 'closed'; }
          item.text = item.name;
          return true;
        } else {
          return false;
        }
      });
      return data;
    }
    return [];
  }
}
